
function xx = Cr3bp_Iner2RotMtx3D(tt , XX , pc , mu)
%
% 圆型限制性三体模型（CR3BP）坐标系转换
% 1) inertial -> rotating
% 2) 3D
% 3) 矩阵转换
%
% 输入：
% tt：       时间 , N x 1
% xx：      旋转系状态 , N x 6
% pc_ini：惯性系中心 , 1（P1 centered）/ 2（P2 centered） , 1 x 1
% mu：    引力常数 , 1 x 1
%
% 参考：
% 2021_ZimovanSpreen, page 37-40
%
% 时间：2024年06月03日
% 作者：张晨
% 单位：CSU
% 邮箱：chenzhang@csu.ac.cn
%%%%%%%%%%%%%%%%%%%%%%%

if size(XX , 2) ~= 6
    disp(' ========== wrong! xx row num! ========== ')
    xx = [];
    return;
end

if size(tt , 2) ~= 1
    disp(' ========== wrong! tt row num! ========== ')
    xx = [];
    return;
end

sin_tt = sin(tt);
cos_tt = cos(tt);
X = XX(: , 1);
Y = XX(: , 2);
Z = XX(: , 3);
VX = XX(: , 4);
VY = XX(: , 5);
VZ = XX(: , 6);

if strcmp(pc , 'p1')
    % P1 centered

    xx = [ X .* cos_tt - mu + Y .* sin_tt, ...
        Y .* cos_tt - X .* sin_tt, ...
        Z, ...
        VX .* cos_tt + Y .* cos_tt + VY .* sin_tt - X .* sin_tt, ...
        VY .* cos_tt - X .* cos_tt - VX .* sin_tt - Y .* sin_tt, ...
        VZ];

elseif strcmp(pc , 'p2')
    % P2 centered

    xx = [X .* cos_tt - mu + Y .* sin_tt + 1, ...
        Y .* cos_tt - X .* sin_tt, ...
        Z, ...
        VX .* cos_tt + Y .* cos_tt + VY .* sin_tt - X .* sin_tt, ...
        VY .* cos_tt - X .* cos_tt - VX .* sin_tt - Y .* sin_tt, ...
        VZ];

else

    fprintf('Wrong！')
    xx;
    return;

end

end
